using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Abp.Domain.Services;


namespace SOEI.Solution.DomainEntities.Parameters.DomainService
{
    /// <summary>
    /// 领域服务接口定义
    ///</summary>
    public interface IParameterManager : IDomainService
    {
        #region -------------------------------------------------辅助工具生成----------------------------------------------
        /// <summary>
        /// 返回表达式数的实体信息即IQueryable类型(可选择部分字段)
        /// </summary>
        /// <returns>IQueryable</returns>
        IQueryable<Parameter> QueryEntityListAsNoTracking();
        /// <summary>
        /// 返回表达式数的实体信息即IQueryable类型
        /// </summary>
        /// <returns>IQueryable</returns>
        IQueryable<Parameter> Query();
        /// <summary>
        /// 返回性能更好的IQueryable类型，但不包含EF Core跟踪标记
        /// </summary>
        /// <returns>IQueryable</returns>
        IQueryable<Parameter> QueryAsNoTracking();
        /// <summary>
        /// 【Parameter】根据Id查询实体信息
        /// </summary>
        /// <param name="id"></param>
        /// <returns>实体</returns>
        Task<Parameter> FindByIdAsync(string id);
        /// <summary>
        /// 【Parameter】检查实体是否存在
        /// </summary>
        /// <returns>是否成功</returns>
        Task<bool> IsExistAsync(string id);
        /// <summary>
        /// 【Parameter】添加实体
        /// </summary>
        /// <param name="entity">实体</param>
        /// <returns></returns>
        Task<Parameter> CreateAsync(Parameter entity);
        /// <summary>
        /// 【Parameter】修改实体
        /// </summary>
        /// <param name="entity">实体</param>
        /// <returns></returns>
        Task UpdateAsync(Parameter entity);
        /// <summary>
        /// 【Parameter】删除实体
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task DeleteAsync(string id);

        /// <summary>
        /// 【Parameter】批量删除
        /// </summary>
        /// <param name="input">Id的集合</param>
        /// <returns></returns>
        Task BatchDelete(List<string> input);
        #endregion

        #region -------------------------------------------------用户自定义------------------------------------------------
        /*请在此扩展领域服务接口*/
        /// <summary>
        /// 获取人员类型
        /// </summary>
        /// <returns></returns>
        IQueryable<Parameter> QueryPersonType();

        /// <summary>
        /// 获取证件类型
        /// </summary>
        /// <returns></returns>
        IQueryable<Parameter> QueryCertificateType();

        /// <summary>获取监管协议状态参数
        /// </summary>
        /// <returns></returns>
        IQueryable<Parameter> QueryAgreementState();

        /// <summary>
        /// 获取买受人购房情况类型
        /// </summary>
        /// <returns></returns>
        IQueryable<Parameter> QueryBuyerConditionType();

        /// <summary>
        /// 获取户籍所在类型
        /// </summary>
        /// <returns></returns>
        IQueryable<Parameter> QueryCensusRegisterType();

        /// <summary>
        /// 获取产权类型
        /// </summary>
        /// <returns></returns>
        IQueryable<Parameter> QueryPropertyType();

        /// <summary> 获取国籍参数表
        /// </summary>
        /// <returns></returns>
        IQueryable<Parameter> QueryNationality();

        /// <summary> 房屋用途参数表
        /// </summary>
        /// <returns></returns>
        IQueryable<Parameter> QueryUsageOfTheHouse();

        /// <summary>
        /// 获取审核状态
        /// </summary>
        /// <returns></returns>
        IQueryable<Parameter> QueryApprovalStatus();

        /// <summary>
        /// 获取按键审批状态
        /// </summary>
        /// <returns></returns>
        IQueryable<Parameter> QueryCaseStatus();

        /// <summary>
        /// 获取申请状态
        /// </summary>
        /// <returns></returns>
        IQueryable<Parameter> QueryApplyStatus();

        /// <summary>
        /// 获取资料审查状态
        /// </summary>
        /// <returns></returns>
        IQueryable<Parameter> QueryMaterialAudit();

        #endregion
    }
}
